#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMap>
#include <QListWidget>
#include <QLabel>
#include <QTextEdit>
#include <QStackedWidget>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QPixmap>
#include <QVBoxLayout>
#include "travellabel.h"  // 添加对 TravelLabel 的引用
#include "fileutils.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void displayImage(const QString &itemName);
    void displayText(const QString &itemName);
    void showTravelPage();
    void showIntroPage();
    void filterListItems(const QString &text);
    void onSearchButtonClicked();
    void onCoordinatesClicked(int x, int y); // 声明槽函数
    void onTSPButtonClicked();

    void Navi(QVector<int> route);
    void on_ClearButton_clicked();
    void calculateColorByQueueLength(double arrivalRate);
    void on_arrivalRate_valueChanged(int value);

    void on_Arrange_clicked();

private:
    void loadData();

    Ui::MainWindow *ui;
    QMap<QString, QVector<double>> dataMap;     // 用于存储从 JSON 文件读取的数据
    QMap<QString, QString> Intro;               // 用于存储每个景点的介绍信息
    QMap<QString, QPointF> positionsMap;        // 用于存储每个景点的位置
    QPointF centralPosition;                    // 用于存储中心位置（例如“太和殿”）
    QStringList names;
    QVector<QVector<QString>> csvData;
    QMap<QString, QVector<double>> geoData;
    QVector<QVector<double>> distanceMatrix;
    QVector<QVector<double>> floydMatrix;
    QVector<QVector<double>> InterestMatrix;
    QVector<int> SpfaConvert(const QVector<int> &sequence);
    QVector<int> dijkstraConvert(const QVector<int> &sequence);
    QVector<int> AstarConvert(const QVector<int> &sequence);
    QVector<int> TSPSolve(const QVector<QVector<double>> &InterestMatrix);
    QVector<int> pointQueue;
    QVector<double> lengths;
    QVector<QPointF> geoVector;
};
QColor calculateColor(int currentLength, int minLength, int maxLength);
#endif // MAINWINDOW_H
